(copyright) Этот раздел я написал по образу и подобию Sun'овского учебника. Так что, кому интересно, может обратиться к первоисточнику.
Как водится, напишем программу, которая называется, как бы вы думали? - конечно же Hello world. Итак, в любом текстовом редакторе, который сохраняет текст as is (как есть), пишем
и сохраняем этот текст в файле HelloWorldApplication.java. Обратите внимание, что файл должен называться точно так же, как и класс, в нем содержащийся.
public class HelloWorldApplication
{
public static void main(String [] args)
{
System.out.println("Hello world!");
}
}
СЛЕДСТВИЕ. Так как файл должен называться так же, как и класс, в нем содержащийся, значит в одном файле может содержаться только один класс. Однако внутри этого класса может быть объявлено сколько угодно вложенных классов.
ВНИМАНИЕ. Java-компилятор и интерпретатор регистрозависимые, так что пишите правильно.
Компилируем в байткод: javac HelloWorldApplication.java
. Учтите, Java не понимает никаких расширений по умолчанию, никаких изменений регистра в имени файла с текстом программы.
ВНИМАНИЕ. Программа может не компилироваться из-за того, что компилятор не может найти какие-либо классы. В этом случае есть два варианта решения проблемы: первый - объявить переменную окружения (environment variable) CLASSPATH, значением которой должен быть список путей к архивам классов, разделенный точкой с запятой, например, CLASSPATH=.;C:\Java\JDKEE\lib\j2ee.jar;C:\Java\JAXP\xalan.jar
; второй вариант (я его больше предпочитаю, и он рекомендован Sun) - указывать пути к архивам классов при компиляции: javac −classpath .;C:\Java\JDKEE\lib\j2ee.jar MyApp.java
ВНИМАНИЕ. Имя архива классов нужно указывать точно, с соблюдением регистра, то есть j2ee.jar ≠ J2EE.JAR.
Архив классов - обычный ZIP-архив. Название свое и расширение эти файлы берут от JAR - Java ARchive. Вы можете просмотреть содержимое любого .JAR-файла с помощью какой-либо ZIP-утилиты.
В результате получаем файл HelloWorldApplication.class. Это и есть байткод, теперь его можно запускать на любой платформе и везде на консоль будет выводиться одно: Hello world!
Запускается программа элементарно: java HelloWorldApplication
. java - и есть пресловутая java-машина; параметр - байткод, расширение .class подставляется автоматически (байткода с другим расширением быть не может). JVM нельзя заставить автоматически компилировать исходник в байткод.
У вас может возникнуть ошибка: Exception in thread "main" java.lang.noSuchMethodException: main
. Проверьте внимательно, класс должен содержать следующее объявление: public static void main(String [] args)
. У вас может быть только два отклонения от этой строчки: слова public и static можно менять местами и, второе, имя формального параметра может быть любым, не обязательно args.
Еще одна очень распространенная ошибка - Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApplication
. Это говорит о том, что JVM не нашла файл с байткодом, а ищет она в каталогах и JAR'ах, указанных либо в переменной CLASSPATH, либо в параметре запуска JVM: java −cp . HelloWorldApplication
. Точка после слова −cp означает текущий каталог. Слово −cp - сокращение от −classpath, которое можно использовать вместо −cp.
Если очень интересно, то в следующих шагах можно рассмотреть причины, по которым класс должен иметь точное объявление main. Там же можно вообще рассмотреть способы входа в Java-программы. Пишите - сделаем.
Первый апплет, два в одном - апплет и консольное приложение, а также исполнения ваших пожеланий.